package com.ruoyi.mapper;

import java.time.LocalDateTime;
import java.util.List;
import com.ruoyi.domain.Penalty;
import com.ruoyi.domain.dto.EmailDto;
import com.ruoyi.domain.dto.PenaltyDto;
import com.ruoyi.domain.dto.UncompensatedPenaltyDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 罚款业务Mapper接口
 *
 * @author qyb
 * @date 2023-12-26
 */
@Mapper
public interface PenaltyMapper
{
    /**
     * 查询罚款业务
     *
     * @param penaltyId 罚款业务主键
     * @return 罚款业务
     */
    public Penalty selectPenaltyByPenaltyId(Long penaltyId);

    /**
     * 查询未赔偿数量
     *
     * @param userId 罚款业务主键
     * @return 罚款业务
     */
    public UncompensatedPenaltyDto selectUncompensatedPenaltyByUserId(Long userId);

    /**
     * 查询罚款业务
     *
     * @param lendId 罚款业务主键
     * @return 罚款业务
     */
    public Penalty selectPenaltyByLendId(Long lendId);
    /**
     * 模糊查询
     *
     * @param penaltyDto 罚款业务
     * @return 罚款业务集合
     */
    List<PenaltyDto> selectSearchList(PenaltyDto penaltyDto);


    /**
     *
     * @return 逾期未缴费
     */
    List<EmailDto> selectOverDueList();



    /**
     * 通过userId查看使用的角色roleId
     */
    PenaltyDto selectRoleIdByUserId(PenaltyDto penaltyDto);
    /**
     * 新增罚款业务
     *
     * @param penalty 罚款业务
     * @return 结果
     */
    public int insertPenalty(Penalty penalty);

    /**
     * 修改罚款业务
     *
     * @param penalty 罚款业务
     * @return 结果
     */
    public int updatePenalty(Penalty penalty);

    /**
     * 删除罚款业务
     *
     * @param penaltyId 罚款业务主键
     * @return 结果
     */
    public int deletePenaltyByPenaltyId(Long penaltyId);

    /**
     * 批量删除罚款业务
     *
     * @param penaltyIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePenaltyByPenaltyIds(Long[] penaltyIds);


    @Select("select count(*) from sys_penalty where create_time between #{beginTime} and #{endTime}")
    Integer selectEveryMonthLostBook(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime);
}
